package CapaDatos;

import java.sql.ResultSet;
import java.util.LinkedList;

public class Categoria_DAO implements DAO  {

	private String sentenciaSQL;
    ConexionDB conexion;
    LinkedList<Categoria_POJO> listaDetalle = new LinkedList<Categoria_POJO>();
    ResultSet resultado;
    int valor;
    
    public Categoria_DAO() {
        this.conexion = new ConexionDB();
    }


    public LinkedList<Categoria_POJO> obtenerReg(int idCategoria) {
    
         sentenciaSQL = "SELECT * FROM Categoria WHERE idCategoria = " + idCategoria;
         System.out.println("Obtener "+sentenciaSQL);
         try {
        	 conexion.abrirConexion();
            resultado = conexion.getResultSet(sentenciaSQL);
            if (resultado.next()) {
                Categoria_POJO categoria = new Categoria_POJO();
                
                categoria.setCategoria_idCategoria(Integer.parseInt(resultado.getString("Categoria_idCategoria")) );
                categoria.setIdCategoria(Integer.parseInt(resultado.getString("idCategoria")));
                categoria.setTitulo(resultado.getString("titulo"));
                System.out.println(categoria+"----------");
                listaDetalle.add(categoria);                
            }
        } catch (Exception ex) {
            //Error lanzado
            System.out.println("Error " + ex);            
        }
        return listaDetalle;
    }
    
    public int guardarReg(String titulo, int Categoria_idCategoria  ){
    	    
        sentenciaSQL = "INSERT INTO Categoria (titulo, Categoria_idCategoria  ) VALUES "
                 + "('"+ titulo+"', "+ Categoria_idCategoria+" )";
         
        System.out.println("Query:  "+sentenciaSQL);
        try {
       	 	conexion.abrirConexion();
            valor = conexion.executeQuery(sentenciaSQL);
            //System.out.println ("Delete exitoso");
            conexion.cerrarConexion();
            return valor;
            
       } catch (Exception ex) {
            System.out.println("error " + ex);
            return -1;
       }
    }

    public int actualizarReg( int idCategoria, String  titulo, int Categoria_idCategoria ){
    
        sentenciaSQL = "UPDATE Categoria SET titulo= '"+ titulo+"',Categoria_idCategoria= "+ Categoria_idCategoria
                     + " WHERE idCategoria="+idCategoria ;            
             System.out.println("Update "+sentenciaSQL);       
         try {
            	 conexion.abrirConexion();
                 valor = conexion.executeQuery(sentenciaSQL);
                 //System.out.println ("Delete exitoso");
                 conexion.cerrarConexion();
                 return valor;
                 
            } catch (Exception ex) {
                 System.out.println("error " + ex);
                 return -1;
            }
    }
     
    public int eliminarReg (int idCategoria ){
    	sentenciaSQL = "DELETE FROM Categoria WHERE idCategoria = "+idCategoria;
        System.out.println("Delete Query: "+sentenciaSQL);
        try {
       	 	conexion.abrirConexion();
            valor = conexion.executeQuery(sentenciaSQL);
            //System.out.println ("Delete exitoso");
            conexion.cerrarConexion();
            return valor;
            
       } catch (Exception ex) {
            System.out.println("error " + ex);
            return -1;
       }
    }
    
    public LinkedList<Categoria_POJO> obtenerCategorias(){
    	
    	sentenciaSQL = "SELECT idCategoria,titulo FROM Categoria";
    	System.out.println("Categorias Query: "+sentenciaSQL);
    	try {
            resultado = conexion.getResultSet(sentenciaSQL);
            while (resultado.next()) {
                Categoria_POJO categoria = new Categoria_POJO();
                
                categoria.setTitulo(resultado.getString("titulo"));
                categoria.setIdCategoria(resultado.getInt("idcategoria"));
                listaDetalle.add(categoria);                
            }
        } catch (Exception ex) {
            //Error lanzado
            System.out.println("Error " + ex);            
        }
        return listaDetalle;
    }
    
    public ResultSet obtenerArticuloporCategoria(int idCategoria){    
    	sentenciaSQL = "SELECT c.titulo,a.idArticulo,a.nombre FROM Categoria c, articulo a WHERE c.idCategoria = "+idCategoria+" ORDER BY c.titulo";
        System.out.println("Articulos por Categoria Query: "+sentenciaSQL);
        try {
        	conexion.abrirConexion();
            resultado = conexion.getResultSet(sentenciaSQL);
            conexion.cerrarConexion();
            return resultado;

        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return null;
        }
    	}
		
		
		
	/**
     * Retorna todos los articulos de una categroria especificada
     * @param idCategoria identificador de la categoria a la que pertenecen los artiuclos
     * @return LinkedList<Articulo_POJO> de articulos
     */
    public LinkedList<Articulo_POJO> obtenerArticulosCat(int idCategoria) {
        sentenciaSQL = "SELECT * FROM Articulo WHERE idCategoria = " + idCategoria;
        System.out.println("Obtener " + sentenciaSQL);
        LinkedList<Articulo_POJO> listaDetalle = new LinkedList<Articulo_POJO>();
        try {

            conexion.abrirConexion();
            resultado = conexion.getResultSet(sentenciaSQL);
            while (resultado.next()) {
                Articulo_POJO articulo = new Articulo_POJO();

                articulo.setDescripcion(resultado.getString("descripcion"));
                articulo.setFechaIngreso(resultado.getString("fechaIngreso"));
                articulo.setIdArticulo(Integer.parseInt(resultado.getString("idArticulo")));
                articulo.setIdCategoria(Integer.parseInt(resultado.getString("idCategoria")));
                articulo.setIdStatus(Integer.parseInt(resultado.getString("idStatus")));
                articulo.setIdUsuario(Integer.parseInt(resultado.getString("idUsuario")));
                articulo.setImagen(resultado.getString("imagen"));
                articulo.setNombre(resultado.getString("nombre"));
                articulo.setPrecio(Double.parseDouble(resultado.getString("precio")));
                articulo.setPuntuacion(Integer.parseInt(resultado.getString("puntuacion")));

                listaDetalle.add(articulo);
                //Prueba
                //System.out.println("Resultado " + resultado.getString("nombre"));
                conexion.cerrarConexion();
            }

        } catch (Exception ex) {
            //Error lanzado
            System.out.println("Error " + ex);
            return null;
        }
        return listaDetalle;
    }
}
